<?php
session_start();
include('include/config.php');
include('include/fonctions.php');
$messageErrMail = 'Page : generation-bulletin.php<br />';

//On test avant toute chose que l'on a bien les id et le trimestre
if ((isset($_GET['id'])) && (isset($_GET['trim'])) && ((intval($_GET['id'])) > 0) && ((intval($_GET['trim'])) > 0)) {
    $prof_id = intval($_GET['id']);
    $trimestre = intval($_GET['trim']);
    switch ($trimestre) {
        case 1:
            $trimestreTitre = '1er Trimestre';
            break;
        case 2:
            $trimestreTitre = '2ème Trimestre';
            break;
        case 3:
            $trimestreTitre = '3ème Trimestre';
            break;
    }

    $connection = connexionBdd();

    /*     * *******************************************************************
     *    On récupère l'ensemble des paramètres d'un professeur, 
     *    comme son nom, civilité et les option de son compte
     * ******************************************************************* */
    $req = $connection->prepare('SELECT `prof_nom` ,  `prof_civ` ,`nom_ecole` FROM  `prof` p INNER JOIN  `ecole` e ON p.`id_ecole` = e.`id_ecole` WHERE `prof_id` =:id LIMIT 0 , 1');
    $req->bindParam(':id', $prof_id, PDO::PARAM_INT);
    $req->execute();
    $donnees = $req->fetch(PDO::FETCH_ASSOC);
    $req->closeCursor();

    //intitulé du bulletin
    $nom_Ecole = 'Bulletin trimestriel - ' . $donnees['nom_ecole'];
    //titre bulletin Civ+Nom enseignant
    $titre = 'Classe de ' . $donnees['prof_civ'] . ' ' . $donnees['prof_nom'];
    //précision après la virgule
    $precision = 1;
    //classement apparent sur le bulletin
    $classement = true;


    /*     * *********************************************************************************************
     *      on récupère la liste des elèves d'un enseignant 
     *      pour la clause IN de la requete suivante
     * ********************************************************************************************* */
    $req = $connection->prepare('SELECT `id_eleve` FROM `eleve` WHERE `id_prof`=:id');
    $req->bindParam(':id', $prof_id, PDO::PARAM_INT);
    $req->execute();
    $count = $req->rowCount();
    if ($count > 0) {
        $liste_eleve = '';
        while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) {
            $liste_eleve.=$donnees['id_eleve'] . ',';
        }
        //on supprime la dernière virgule
        $liste_eleve = substr($liste_eleve, 0, strlen($liste_eleve) - 1);
    } else {
        echo 'Un erreur technique est survenue, merci de vous reconnecter au site.';
        //si on trouve plus d'un pseudo on envoie un mail à l'admin pour le prévenir de se doublon théoriquement imposible
        $messageErrMail .='Génération bulletin, impossbile de trouver des eleves : ' . $email . '<br/>';
        error_log($messageErrMail, 1, $mailAdmin, $enteteErrLog);
        exit();
    }
    $req->closeCursor();
} else {
    exit();
}

/* * *******************************************************************
 *      Si on arrive ici c'est que l'on a tous les paramètres
 *      utile pour la génération du bulletin
 * ******************************************************************* */
require('fpdf17/fpdf.php');

class PDF extends FPDF {

    // En-tête du pdf qui va se retrouver sur toutes les feuilles à générer
    function Header() {
        //on récupère le nom de l'école et le nom de l'engseignant
        global $nom_Ecole, $titre;
        // Police Arial gras 15
        $this->SetFont('helvetica', 'B', 16);
        $this->Cell(0, 0, utf8_decode($nom_Ecole), 0, 2, 'C');
        $this->Ln(8);
        $this->Cell(0, 0, utf8_decode($titre), 0, 2, 'C');
        $this->Ln(5);
    }

}

// Instanciation de la classe dérivée
$pdf = new PDF();

// Titres des colonnes
$pdf->SetFont('helvetica', '', 12);

/* * *********************************************************************
 *     récupération des moyennes de classes d'un trimestre
 * ********************************************************************* */
$reqMoyClasse = $connection->query('SELECT ROUND(AVG(`numerique_note`), 2) AS moyenne,`nom_matiere` 
            FROM `note` 
            INNER JOIN `matiere` ON `note`. `id_matiere`= `matiere`.`id_matiere` 
            WHERE `trimestre_note` = ' . $trimestre . ' 
            AND `id_eleve` IN (' . $liste_eleve . ') 
            GROUP BY  `note`.`id_matiere` 
            ORDER BY    `matiere`.`id_domaine` ,  `matiere`.`id_matiere` ');
$reqMoyClasse->execute();
$count = $reqMoyClasse->rowCount();
if ($count < 1) {
    echo 'Vous n\'avez aucune moyenne pour cette période. Merci de renseigné des notes.';
    exit();
} else {
    $moyenneClasse = $reqMoyClasse->fetchAll(PDO::FETCH_ASSOC);
}
$reqMoyClasse->closeCursor();

/* * ********************************************************
 *      On va calculer la moyenne générale de la classe
 * ******************************************************** */
$adition = 0;
foreach ($moyenneClasse as $value) {
    if (is_numeric($value['moyenne'])) {
        $adition += round($value['moyenne'], $precision);
    }
}
$moyenneGlobalClasse = round($adition / count($moyenneGlobalClasse), $precision);


/* * *********************************************************************
 *     récupération des moyennes de classes d'un trimestre par élève
 * ********************************************************************* */
$query = 'SELECT e.`nom_eleve`, e.`prenom_eleve`, `nom_niveau`,m.`nom_matiere`, ROUND(AVG(`numerique_note`), 2) AS moyenne
FROM `note` n
INNER JOIN `eleve` e ON e.`id_eleve` = n.`id_eleve`
INNER JOIN `matiere` m ON m.`id_matiere` = n.`id_matiere`
INNER JOIN `niveau` ON e.`id_niveau`=`niveau`.`id_niveau`
WHERE n.`trimestre_note` = ' . $trimestre . ' AND n.`id_eleve` IN (' . $liste_eleve . ')
GROUP BY n.`id_eleve`, n.`id_matiere`
ORDER BY `niveau`.`id_niveau`,e.`nom_eleve`, e.`prenom_eleve`, m.`id_domaine`, m . `nom_matiere`';
$reqMoyenne = $connection->query($query);
$reqMoyenne->execute();
$nbrEleveTotal = $reqMoyenne->rowCount();
$tabEleve = $results->fetchAll(PDO::FETCH_ASSOC);
$reqMoyenne->closeCursor();


//on va refaire un tableau avec l'ordre des enfants par moyenne
$precedent='';
$moyenneEnfant = $compteur = 0;
foreach ($tabEleve as $valueEleve) {
    if ($précédent!=$valueEleve['nom_eleve']){
        $moyenneEnfant = $compteur = 0;
    }else{
        
    }
    $moyenneEnfant+=$valueEleve['moyenne'];
    $compteur++;
}
$i = 0;
$compteur = 1;

while ($row = $reqMoyenne->fetch(PDO::FETCH_ASSOC)) {
    $pdf->AddPage();
    $pdf->Cell(47, 5, utf8_decode('Nom :'), 0, 0, 'R');
    $pdf->Cell(47, 5, utf8_decode($row['nom_eleve']), 0, 0);
    $pdf->Cell(47, 5, utf8_decode('Niveau :'), 0, 0, 'R');
    $pdf->Cell(47, 5, utf8_decode($row['nom_niveau']), 0, 0);
    $pdf->Ln();

    $pdf->Cell(47, 5, utf8_decode('Prénom :'), 0, 0, 'R');
    $pdf->Cell(47, 5, utf8_decode($row['prenom_eleve']), 0, 0);
    $pdf->Cell(47, 5, utf8_decode('Période :'), 0, 0, 'R');
    $pdf->Cell(47, 5, utf8_decode($trimestreTitre), 0, 0);
    $pdf->Ln();

    $pdf->Cell(47, 5, utf8_decode('Nombre d\'absences :'), 0, 0, 'R');
    $pdf->Cell(47, 5, '', 0, 0);
    if ($classement) {
        $pdf->Cell(47, 5, utf8_decode('Classement :'), 0, 0, 'R');
        $pdf->Cell(47, 5, utf8_decode($compteur++ . '/' . $nbrEleveTotal), 0, 0);
    }
    $pdf->Ln(8);

    $pdf->SetFont('helvetica', 'B', 11);
    $pdf->Cell(65, 5, utf8_decode('Matière'), 1, 0, 'C');
    $pdf->Cell(23, 5, utf8_decode('Moy. éléve'), 1, 0, 'C');
    $pdf->Cell(23, 5, 'Moy. classe', 1, 0, 'C');
    $pdf->Ln();

    $pdf->SetFont('helvetica', '', 10);

    //gestion de l'alternance de la couleur de fond des lignes
    $fontBool = true;
    $pdf->SetFillColor(240, 240, 240);

    //Boucle pour les notes par domaines et par élèves.
    while ($donnees = $reqMoyClasse->fetch(PDO::FETCH_ASSOC)) {
        //On test si la moyenne de la classe existe pour ce domaine
        $moyenneClasse = '';
        foreach ($tab as $v1) {
            foreach ($v1 as $v2) {
                if ($v2 == $tabMatiere['titre']) {
                    $moyenneClasse = round($moyennePrecedente, $precision);
                }
                $moyennePrecedente = $v2;
            }
        }

        $pdf->Cell(65, 9, utf8_decode($donnees['nom_matiere']), 1, 0, 'L', $fontBool);
        //Gestion du cas où l'élève est absent. Il n'as pas zero, mais la mention ABS
        if ($resultat['moyenne'] != NULL) {
            //si la moyenne est en dessous de dix on met en gras
            if ($resultat['moyenne'] < 10) {
                $pdf->SetFont('helvetica', 'B', 11);
                $pdf->Cell(23, 9, round($resultat['moyenne'], $precision), 1, 0, 'C', $fontBool);
            } else {
                $pdf->Cell(23, 9, round($resultat['moyenne'], $precision), 1, 0, 'C', $fontBool);
            }
        } else {
            $pdf->Cell(23, 9, 'Abs', 1, 0, 'C', $fontBool);
        }
        $pdf->SetFont('helvetica', '', 11);
        $pdf->Cell(23, 9, utf8_decode($moyenneClasse), 1, 0, 'C', $fontBool);
        //$pdf->Cell(85, 9, '', 1, 0, 'L', $fontBool);
        $pdf->Ln();
        $fontBool = !$fontBool;
    }
    $pdf->SetFillColor(0, 0, 0);
    $pdf->SetFont('helvetica', 'B', 12);
    $pdf->Cell(65, 8, utf8_decode('Moyenne : '), 1, 0, 'R');
    $pdf->Cell(23, 8, round($row['moyenneeleve'], $precision), 1, 0, 'C');
    $pdf->Cell(23, 8, $moyenneGlobalClasse, 1, 0, 'C');
    $pdf->Ln(15);

    //Observation
    $pdf->SetFont('helvetica', 'B', 12);
    $pdf->Cell(98, 7, utf8_decode('Observations de la maîtresse'), 1, 0, 'C');
    $pdf->Cell(98, 7, utf8_decode('Observations de la directrice'), 1, 0, 'C');
    $pdf->Ln();
    $pdf->Cell(98, 40, '', 1, 0);
    $pdf->Cell(98, 40, '', 1, 0);
    $pdf->Ln(43);
    //Signature
    $pdf->SetFont('helvetica', '', 11);
    $pdf->Cell(0, 5, utf8_decode('Signature des parents'), 0, 0, 'C');
}

$pdf->Output();
?>
